//2808.使循环数组所有元素相等的最少秒数
//https://leetcode.cn/problems/minimum-seconds-to-equalize-a-circular-array/?envType=daily-question&envId=2024-01-30
class Solution {
public:
    int minimumSeconds(vector<int>& nums) {
        //所有元素变成相等元素 需要将所有元素变成某一个元素
        unordered_map<int,vector<int>> hash;
        int n = nums.size();
        int ret = n; //最长时间就是所有元素都不一样
        //记录相同元素下标的位置 方便计算距离
        for(int i = 0;i<n;++i) hash[nums[i]].push_back(i);
        for(auto& [k,v]:hash)
        {
            //首位下标相减 防止 2,1,3,3,2 这种环路
            int maxn = v.front()+n-v.back();
            //求最长距离
            for(int i = 1;i<v.size();++i) maxn = max(maxn,v[i]-v[i-1]);
            ret = min(ret,maxn/2); //最长距离/2 求最短距离最小值
        }
        return ret;
    }
};